迭代数组

使用 nditer 对其进行迭代:

语法:

np.nditer(iterable, op_flags = 'readonly',flags = 'c_index')

参数 说明
iterable 遍历的数组
op_flags 为了在遍历数组的同时实现对数组元素值的修改,必须制定 readwrite或 writeonly 模式
flags c_index : 可以跟踪 C 语言顺序的索引
f_index : 可以跟踪 Fortran 语言顺序的索引
multi-index : 每次迭代可以跟踪一种索引类型
external_loop : 给出的值是具有多个值的一维数组,而不是零维数组
np_ar = np.arange(6).reshape(2,3)
print('原始数组:\n{}'.format(np_ar))
print('迭代输出元素:')
for x in np.nditer(np_ar):
    print(x,end=',')

# 输出结果:
# 原始数组:
#  [[0 1 2]
#   [3 4 5]]
# 迭代输出元素:
# 0,1,2,3,4,5,

for x in np.nditer(np_ar,order = 'F'):
    print(x,end=',')

# 输出结果:
# 0,3,1,4,2,5,

for x in np.nditer(np_ar, order = 'F') # Fortran order 列序优先

for x in np.nditer(np_ar, order = 'C') # C order 行序优先

np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
c_order_up = np_ar.copy(order = 'C')
print('以 C语言格式顺序排序:\n{}'.format(c_order_up))
f_order_up = np_ar.copy(order = 'F')
print('以 fortran 语言格式顺序排序:\n{}'.format(f_order_up))

# 输出结果:
# 原始数据:
# [[ 0  5 10 15]
#  [20 25 30 35]
#  [40 45 50 55]]
# 以 C语言格式顺序排序:
# [[ 0  5 10 15]
#  [20 25 30 35]
#  [40 45 50 55]]
# 以 fortran 语言格式顺序排序:
# [[ 0  5 10 15]
#  [20 25 30 35]
#  [40 45 50 55]]

遍历数组的同时修改数据:

np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
for x in np.nditer(np_ar, op_flags = ['writeonly']):
    x[...] = 2*x

print('修改后的数据\n{}'.format(np_ar))

# 输出结果:
#  原始数据:
#  [[ 0  5 10 15]
#   [20 25 30 35]
#   [40 45 50 55]]
#  修改后的数据
#  [[  0  10  20  30]
#   [ 40  50  60  70]
#   [ 80  90 100 110]]

迭代器对每列进行遍历,并组合为一维数组:

np_ar = np.arange(0,60,5).reshape(3,4)
print('原始数据:\n{}'.format(np_ar))
for x in np.nditer(np_ar, flags = ['external_loop'], order = 'F'):
    print(x, end = ',')

# 输出结果:
# 原始数据:
# [[ 0  5 10 15]
#  [20 25 30 35]
#  [40 45 50 55]]
# [ 0 20 40],[ 5 25 45],[10 30 50],[15 35 55],